package com.example.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.dto.TagPageDTO;
import com.example.entity.Tag;
import com.example.mapper.TagMapper;
import com.example.service.TagService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.vo.TagListVO;
import com.example.vo.TagVO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 标签表 服务实现类
 * </p>
 *
 * @author wuyunbin
 * @since 2024-10-18
 */
@Slf4j
@Service
public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements TagService {

    @Resource
    private TagMapper tagMapper;

    @Override
    public IPage<Tag> getPage(TagPageDTO tagPageDTO) {
        IPage<Tag> pageInfo=new Page<>(tagPageDTO.getCurrent(), tagPageDTO.getSize());
        LambdaQueryWrapper<Tag> wrapper=new LambdaQueryWrapper<>();
        wrapper.like(tagPageDTO.getTagName()!=null,Tag::getName,tagPageDTO.getTagName());
        wrapper.between(tagPageDTO.getStartDate()!=null,Tag::getCreateTime,tagPageDTO.getStartDate(),tagPageDTO.getEndDate());
        IPage<Tag> page = this.page(pageInfo, wrapper);
        return page;
    }

    @Override
    public List<TagListVO> getSelectList() {
        List<Tag> tags = this.list();
        List<TagListVO> tagListVOList = new ArrayList<>();
        for (Tag tag : tags) {
            TagListVO tagListVO = new TagListVO();
            tagListVO.setLabel(tag.getName());
            tagListVO.setValue(tag.getId());
            tagListVOList.add(tagListVO);
        }
        return tagListVOList;
    }

    @Override
    public List<TagVO> getTagList() {
        // 先更新标签文章数量
        try {
            tagMapper.updateTagArticlesCount();
            log.info("标签文章数量更新成功");
        } catch (Exception e) {
            log.error("更新标签文章数量失败: {}", e.getMessage(), e);
        }
        
        // 从数据库获取所有标签（现在包含了更新后的articlesTotal数据）
        List<Tag> tags = this.list();
        // 转换为前端需要的格式
        List<TagVO> voList = new ArrayList<>();
        for (Tag tag : tags) {
            TagVO vo = new TagVO();
            vo.setId(tag.getId());
            vo.setName(tag.getName());
            
            // 设置文章数量
            if (tag.getArticlesTotal() != null) {
                vo.setArticleCount(tag.getArticlesTotal());
                log.info("标签 [{}] 的文章数量: {}", tag.getName(), tag.getArticlesTotal());
            } else {
                // 如果字段为空，可以默认为0
                vo.setArticleCount(0);
                log.warn("标签 [{}] 的文章数量为null", tag.getName());
            }
            
            // 设置描述
            vo.setDescription("标签：" + tag.getName());
            
            voList.add(vo);
        }
        return voList;
    }
}
